package org.mspring.mlog.api.weibo.tencent.api;

import java.io.File;

import org.apache.http.message.BasicNameValuePair;
import org.mspring.mlog.api.weibo.tencent.beans.OAuth;
import org.mspring.mlog.api.weibo.tencent.utils.QArrayList;
import org.mspring.mlog.api.weibo.tencent.utils.QHttpClient;

/**
 * 微博相关API
 * 
 * @see <a href=
 *      "http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3"
 *      >腾讯微博开放平台上微博相关的API文档<a>
 */

public class TAPI extends BasicAPI {

    private String tShowUrl = apiBaseUrl + "/t/show";
    private String tAddUrl = apiBaseUrl + "/t/add";
    private String tAddPicUrl = apiBaseUrl + "/t/add_pic";
    private String tAddPicUrlUrl = apiBaseUrl + "/t/add_pic_url";
    private String tAddVideoUrl = apiBaseUrl + "/t/add_video";
    private String tCommentUrl = apiBaseUrl + "/t/comment";
    private String tDelUrl = apiBaseUrl + "/t/del";
    private String tReAddUrl = apiBaseUrl + "/t/re_add";
    private String tReCountUrl = apiBaseUrl + "/t/re_count";
    private String tReListUrl = apiBaseUrl + "/t/re_list";
    private String tReplyUrl = apiBaseUrl + "/t/reply";

    /**
     * 使用完毕后，请调用 shutdownConnection() 关闭自动生成的连接管理器
     * 
     * @param OAuthVersion
     *            根据OAuthVersion，配置通用请求参数
     */
    public TAPI(String OAuthVersion) {
        super(OAuthVersion);
    }

    /**
     * @param OAuthVersion
     *            根据OAuthVersion，配置通用请求参数
     * @param qHttpClient
     *            使用已有的连接管理器
     */
    public TAPI(String OAuthVersion, QHttpClient qHttpClient) {
        super(OAuthVersion, qHttpClient);
    }

    /**
     * 获取一条微博数据
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param id
     *            微博id
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E8%8E%B7%E5%8F%96%E4%B8%80%E6%9D%A1%E5%BE%AE%E5%8D%9A%E6%95%B0%E6%8D%AE">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String show(OAuth oAuth, String format, String id) throws Exception {
        QArrayList paramsList = new QArrayList();
        paramsList.add(new BasicNameValuePair("format", format));
        paramsList.add(new BasicNameValuePair("id", id));

        return requestAPI.getResource(tShowUrl, paramsList, oAuth);
    }

    /**
     * 发表一条微博
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param content
     *            微博内容
     * @param clientip
     *            用户IP(以分析用户所在地)
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E5%8F%91%E8%A1%A8%E4%B8%80%E6%9D%A1%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String add(OAuth oAuth, String format, String content, String clientip) throws Exception {
        return this.add(oAuth, format, content, clientip, "", "", "");
    }

    /**
     * 发表一条微博
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param content
     *            微博内容
     * @param clientip
     *            用户IP(以分析用户所在地)
     * @param jing
     *            经度（可以填空）
     * @param wei
     *            纬度（可以填空）
     * @param syncflag
     *            微博同步到空间分享标记（可选，0-同步，1-不同步，默认为0）
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E5%8F%91%E8%A1%A8%E4%B8%80%E6%9D%A1%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String add(OAuth oAuth, String format, String content, String clientip, String jing, String wei, String syncflag) throws Exception {
        QArrayList paramsList = new QArrayList();
        paramsList.add(new BasicNameValuePair("format", format));
        paramsList.add(new BasicNameValuePair("content", content));
        paramsList.add(new BasicNameValuePair("clientip", clientip));
        paramsList.add(new BasicNameValuePair("jing", jing));
        paramsList.add(new BasicNameValuePair("wei", wei));
        paramsList.add(new BasicNameValuePair("syncflag", syncflag));

        return requestAPI.postContent(tAddUrl, paramsList, oAuth);
    }

    /**
     * 发表一条微博
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param content
     *            微博内容
     * @param clientip
     *            用户IP(以分析用户所在地)
     * @param syncflag
     *            微博同步到空间分享标记（可选，0-同步，1-不同步，默认为0）
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E5%8F%91%E8%A1%A8%E4%B8%80%E6%9D%A1%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String add(OAuth oAuth, String format, String content, String clientip, String syncflag) throws Exception {
        QArrayList paramsList = new QArrayList();
        paramsList.add(new BasicNameValuePair("format", format));
        paramsList.add(new BasicNameValuePair("content", content));
        paramsList.add(new BasicNameValuePair("clientip", clientip));
        paramsList.add(new BasicNameValuePair("syncflag", syncflag));

        return requestAPI.postContent(tAddUrl, paramsList, oAuth);
    }

    /**
     * 删除一条微博数据
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param id
     *            微博id
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E5%88%A0%E9%99%A4%E4%B8%80%E6%9D%A1%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String del(OAuth oAuth, String format, String id) throws Exception {
        QArrayList paramsList = new QArrayList();
        paramsList.add(new BasicNameValuePair("format", format));
        paramsList.add(new BasicNameValuePair("id", id));

        return requestAPI.postContent(tDelUrl, paramsList, oAuth);
    }

    /**
     * 转播一条微博
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param content
     *            微博内容
     * @param clientip
     *            用户IP(以分析用户所在地)
     * @param reid
     *            转播父结点微博id
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E8%BD%AC%E6%92%AD%E4%B8%80%E6%9D%A1%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String reAdd(OAuth oAuth, String format, String content, String clientip, String reid) throws Exception {
        return this.reAdd(oAuth, format, content, clientip, "", "", reid);
    }

    /**
     * 转播一条微博
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param content
     *            微博内容
     * @param clientip
     *            用户IP(以分析用户所在地)
     * @param jing
     *            经度（可以填空）
     * @param wei
     *            纬度（可以填空）
     * @param reid
     *            转播父结点微博id
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E8%BD%AC%E6%92%AD%E4%B8%80%E6%9D%A1%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String reAdd(OAuth oAuth, String format, String content, String clientip, String jing, String wei, String reid) throws Exception {
        QArrayList paramsList = new QArrayList();
        paramsList.add(new BasicNameValuePair("format", format));
        paramsList.add(new BasicNameValuePair("content", content));
        paramsList.add(new BasicNameValuePair("clientip", clientip));
        paramsList.add(new BasicNameValuePair("jing", jing));
        paramsList.add(new BasicNameValuePair("wei", wei));
        paramsList.add(new BasicNameValuePair("reid", reid));

        return requestAPI.postContent(tReAddUrl, paramsList, oAuth);
    }

    /**
     * 点评一条微博
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param content
     *            微博内容
     * @param clientip
     *            用户IP(以分析用户所在地)
     * @param reid
     *            点评父结点微博id
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E7%82%B9%E8%AF%84%E4%B8%80%E6%9D%A1%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String comment(OAuth oAuth, String format, String content, String clientip, String reid) throws Exception {
        return this.comment(oAuth, format, content, clientip, "", "", reid);
    }

    /**
     * 点评一条微博
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param content
     *            微博内容
     * @param clientip
     *            用户IP(以分析用户所在地)
     * @param jing
     *            经度（可以填空）
     * @param wei
     *            纬度（可以填空）
     * @param reid
     *            点评父结点微博id
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E7%82%B9%E8%AF%84%E4%B8%80%E6%9D%A1%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String comment(OAuth oAuth, String format, String content, String clientip, String jing, String wei, String reid) throws Exception {
        QArrayList paramsList = new QArrayList();
        paramsList.add(new BasicNameValuePair("format", format));
        paramsList.add(new BasicNameValuePair("content", content));
        paramsList.add(new BasicNameValuePair("clientip", clientip));
        paramsList.add(new BasicNameValuePair("jing", jing));
        paramsList.add(new BasicNameValuePair("wei", wei));
        paramsList.add(new BasicNameValuePair("reid", reid));

        return requestAPI.postContent(tCommentUrl, paramsList, oAuth);
    }

    /**
     * 回复一条微博
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param content
     *            微博内容
     * @param clientip
     *            用户IP(以分析用户所在地)
     * @param reid
     *            回复的父结点微博id
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E5%9B%9E%E5%A4%8D%E4%B8%80%E6%9D%A1%E5%BE%AE%E5%8D%9A%EF%BC%88%E5%8D%B3%E5%AF%B9%E8%AF%9D%EF%BC%89">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String reply(OAuth oAuth, String format, String content, String clientip, String reid) throws Exception {
        return this.reply(oAuth, format, content, clientip, "", "", reid);
    }

    /**
     * 回复一条微博
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param content
     *            微博内容
     * @param clientip
     *            用户IP(以分析用户所在地)
     * @param jing
     *            经度（可以填空）
     * @param wei
     *            纬度（可以填空）
     * @param reid
     *            回复的父结点微博id
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E5%9B%9E%E5%A4%8D%E4%B8%80%E6%9D%A1%E5%BE%AE%E5%8D%9A%EF%BC%88%E5%8D%B3%E5%AF%B9%E8%AF%9D%EF%BC%89">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String reply(OAuth oAuth, String format, String content, String clientip, String jing, String wei, String reid) throws Exception {
        QArrayList paramsList = new QArrayList();
        paramsList.add(new BasicNameValuePair("format", format));
        paramsList.add(new BasicNameValuePair("content", content));
        paramsList.add(new BasicNameValuePair("clientip", clientip));
        paramsList.add(new BasicNameValuePair("jing", jing));
        paramsList.add(new BasicNameValuePair("wei", wei));
        paramsList.add(new BasicNameValuePair("reid", reid));

        return requestAPI.postContent(tReplyUrl, paramsList, oAuth);
    }

    /**
     * 发表一条带图片的微博
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param content
     *            微博内容
     * @param clientip
     *            用户IP(以分析用户所在地)
     * @param picpath
     *            可以是本地图片路径 或 网络地址
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E5%8F%91%E8%A1%A8%E4%B8%80%E6%9D%A1%E5%B8%A6%E5%9B%BE%E7%89%87%E7%9A%84%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档1-本地图片</a>
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E7%94%A8%E5%9B%BE%E7%89%87URL%E5%8F%91%E8%A1%A8%E5%B8%A6%E5%9B%BE%E7%89%87%E7%9A%84%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档2-网络图片</a>
     */
    public String addPic(OAuth oAuth, String format, String content, String clientip, String picpath) throws Exception {
        return this.addPic(oAuth, format, content, clientip, "", "", picpath, "");
    }

    /**
     * 发表一条带图片的微博
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param content
     *            微博内容
     * @param clientip
     *            用户IP(以分析用户所在地)
     * @param jing
     *            经度（可以填空）
     * @param wei
     *            纬度（可以填空）
     * @param picpath
     *            可以是本地图片路径 或 网络地址
     * @param syncflag
     *            微博同步到空间分享标记（可选，0-同步，1-不同步，默认为0）
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E5%8F%91%E8%A1%A8%E4%B8%80%E6%9D%A1%E5%B8%A6%E5%9B%BE%E7%89%87%E7%9A%84%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档1-本地图片</a>
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E7%94%A8%E5%9B%BE%E7%89%87URL%E5%8F%91%E8%A1%A8%E5%B8%A6%E5%9B%BE%E7%89%87%E7%9A%84%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档2-网络图片</a>
     */
    public String addPic(OAuth oAuth, String format, String content, String clientip, String jing, String wei, String picpath, String syncflag) throws Exception {
        QArrayList paramsList = new QArrayList();
        paramsList.add(new BasicNameValuePair("format", format));
        paramsList.add(new BasicNameValuePair("content", content));
        paramsList.add(new BasicNameValuePair("clientip", clientip));
        paramsList.add(new BasicNameValuePair("jing", jing));
        paramsList.add(new BasicNameValuePair("wei", wei));
        paramsList.add(new BasicNameValuePair("syncflag", syncflag));

        if (new File(picpath).exists()) {
            //
            QArrayList pic = new QArrayList();
            pic.add(new BasicNameValuePair("pic", picpath));
            return requestAPI.postFile(tAddPicUrl, paramsList, pic, oAuth);
        } else {
            paramsList.add(new BasicNameValuePair("pic_url", picpath));
            return requestAPI.postContent(tAddPicUrlUrl, paramsList, oAuth);
        }

    }

    /**
     * 获取微博当前已被转播次数
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param ids
     *            微博ID列表，用“,”隔开
     * @param flag
     *            0－获取转发计数，1－获取点评计数 2－两者都获取
     * 
     * @return
     * @throws Exception
     * @see <a href=
     *      "http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E8%BD%AC%E6%92%AD%E6%95%B0%E6%88%96%E7%82%B9%E8%AF%84%E6%95%B0"
     *      >腾讯微博开放平台上关于此条API的文档<a>
     */
    public String reCount(OAuth oAuth, String format, String ids, String flag) throws Exception {
        QArrayList paramsList = new QArrayList();
        paramsList.add(new BasicNameValuePair("format", format));
        paramsList.add(new BasicNameValuePair("ids", ids));
        paramsList.add(new BasicNameValuePair("flag", flag));

        return requestAPI.getResource(tReCountUrl, paramsList, oAuth);
    }

    /**
     * 获取单条微博的转播理由/点评列表
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param flag
     *            标识。0－转播列表 1－点评列表 2－点评与转播列表
     * @param rootid
     *            转发或回复的微博根结点id（源微博id）
     * @param pageflag
     *            分页标识（0：第一页，1：向下翻页，2：向上翻页）
     * @param pagetime
     *            本页起始时间（第一页：填0，向上翻页：填上一次请求返回的第一条记录时间，向下翻页：填上一次请求返回的最后一条记录时间）
     * @param reqnum
     *            每次请求记录的条数（1-100条）
     * @param twitterid
     *            翻页用，第1-100条填0，继续向下翻页，填上一次请求返回的最后一条记录id
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E8%8E%B7%E5%8F%96%E5%8D%95%E6%9D%A1%E5%BE%AE%E5%8D%9A%E7%9A%84%E8%BD%AC%E5%8F%91%E6%88%96%E7%82%B9%E8%AF%84%E5%88%97%E8%A1%A8">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String reList(OAuth oAuth, String format, String flag, String rootid, String pageflag, String pagetime, String reqnum, String twitterid) throws Exception {
        QArrayList paramsList = new QArrayList();
        paramsList.add(new BasicNameValuePair("format", format));
        paramsList.add(new BasicNameValuePair("flag", flag));
        paramsList.add(new BasicNameValuePair("rootid", rootid));
        paramsList.add(new BasicNameValuePair("pageflag", pageflag));
        paramsList.add(new BasicNameValuePair("pagetime", pagetime));
        paramsList.add(new BasicNameValuePair("reqnum", reqnum));
        paramsList.add(new BasicNameValuePair("twitterid", twitterid));

        return requestAPI.getResource(tReListUrl, paramsList, oAuth);
    }

    /**
     * 发表视频微博
     * 
     * @param oAuth
     * @param format
     *            返回数据的格式 是（json或xml）
     * @param content
     *            微博内容
     * @param clientip
     *            用户IP(以分析用户所在地) 用户IP（必填）用户浏览器IP,
     * @param jing
     *            经度（可以填空） 经度（可以填空）
     * @param wei
     *            纬度（可以填空）
     * @param url
     *            视频地址，后台自动分析视频信息，支持youku,tudou,ku6
     * @param syncflag
     *            微博同步到空间分享标记（可选，0-同步，1-不同步，默认为0）
     * @return
     * @throws Exception
     * @see <a
     *      href="http://wiki.open.t.qq.com/index.php/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E5%8F%91%E8%A1%A8%E8%A7%86%E9%A2%91%E5%BE%AE%E5%8D%9A">腾讯微博开放平台上关于此条API的文档</a>
     */
    public String addVideo(OAuth oAuth, String format, String content, String clientip, String jing, String wei, String url, String syncflag) throws Exception {
        QArrayList paramsList = new QArrayList();
        paramsList.add(new BasicNameValuePair("format", format));
        paramsList.add(new BasicNameValuePair("content", content));
        paramsList.add(new BasicNameValuePair("clientip", clientip));
        paramsList.add(new BasicNameValuePair("jing", jing));
        paramsList.add(new BasicNameValuePair("wei", wei));
        paramsList.add(new BasicNameValuePair("url", url));
        paramsList.add(new BasicNameValuePair("syncflag", syncflag));

        return requestAPI.postContent(tAddVideoUrl, paramsList, oAuth);
    }

    public void setAPIBaseUrl(String apiBaseUrl) {
        this.apiBaseUrl = apiBaseUrl;
        tShowUrl = apiBaseUrl + "/t/show";
        tAddUrl = apiBaseUrl + "/t/add";
        tAddPicUrl = apiBaseUrl + "/t/add_pic";
        tAddPicUrlUrl = apiBaseUrl + "/t/add_pic_url";
        tAddVideoUrl = apiBaseUrl + "/t/add_video";
        tCommentUrl = apiBaseUrl + "/t/comment";
        tDelUrl = apiBaseUrl + "/t/del";
        tReAddUrl = apiBaseUrl + "/t/re_add";
        tReCountUrl = apiBaseUrl + "/t/re_count";
        tReListUrl = apiBaseUrl + "/t/re_list";
        tReplyUrl = apiBaseUrl + "/t/reply";
    }
}
